// api/core.js

// ------------------- 配置区 -------------------
const BASE_URL = 'http://121.196.204.249';
const TOKEN_KEY = 'user_token';
const OPEN_ID = 'open_id';

// ------------------- 核心请求函数 -------------------

/**
 * 核心请求方法
 * @param {object} options - 请求配置
 * @returns {Promise} 返回Promise对象
 */
const request = (options = {}) => {
  return new Promise((resolve, reject) => {
    // 显示加载提示
    if (options.showLoading) {
      wx.showLoading({
        title: options.loadingTitle || '加载中...',
        mask: true,
      });
    }

    //const token = wx.getStorageSync(TOKEN_KEY);
    const open_id = wx.getStorageSync(OPEN_ID);

    if (open_id) {
      options.data.open_id = open_id
    }

    wx.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'content-type': options.method === 'GET' ? 'application/json' : 'application/x-www-form-urlencoded',
        //'Authorization': token ? `Bearer ${token}` : '',
        ...options.header,
      },
      success: (res) => {
        if (res.statusCode >= 200 && res.statusCode < 300) {
          if (res.data.code === "0") {
            resolve(res.data.data, res.data);
          } else if (res.data.code === 401) {
            handleTokenExpired();
            reject(res.data);
          } else {
            showErrorToast(res.data.message || '请求失败');
            reject(res.data);
          }
        } else {
          showErrorToast(`服务器错误 (${res.statusCode})`);
          reject(res);
        }
      },
      fail: (err) => {
        console.error('网络请求失败:', err);
        showErrorToast('网络异常，请检查网络连接');
        reject(err);
      },
      complete: () => {
        if (options.showLoading) {
          wx.hideLoading();
        }
      },
    });
  });
};

// ------------------- 辅助函数 -------------------

const showErrorToast = (message) => {
  wx.showToast({
    title: message,
    icon: 'none',
    duration: 2000,
  });
};

const handleTokenExpired = () => {
  wx.removeStorageSync(TOKEN_KEY);
  wx.showModal({
    title: '登录过期',
    content: '您的登录已过期，请重新登录',
    showCancel: false,
    success: () => {
      wx.reLaunch({
        url: '/pages/login/login',
      });
    },
  });
};

// ------------------- 导出 -------------------
module.exports = {
  request,
  showErrorToast, // 也可以导出，供其他模块使用
};
